/**
  * 16.5 类型别名
  * 你可以通过 type 关键字来创建一个简单的别名：
  * 类型别名必须被嵌套在类或者对象中，不能出现在 scala 文件的顶层。
  */
class Document {
  import scala.collection.mutable._
  type Index = HashMap[String, (Int, Int)]
}

class Book extends Document {
  val tables = new Index
  val figures = new Index

  def addTableRef(title: String, chapter: Int, section: Int) {
    tables += title -> (chapter, section)
  }

  def addFigureRef(caption: String, chapter: Int, section: Int) {
    figures += caption -> (chapter, section)
  }
}

/**
  * 自身类型
  * 指代自身
  *
  * 如果内部类想访问外部类的属性，可以通过Outer.this.v1
  * 还有一种方法 outer=>就可以指定Outer这个对象的实例 ，下面就可以直接用了
  */
class Outer { outer =>
  val v1 = "here"
  class Inner {
    println(Outer.this.v1)//用outer表示外部类，相当于outer.this
    println(outer.v1)
  }

}

